package debut.peinture;

import java.io.IOException;
import java.net.URL;
import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.database.Cursor;
import android.database.DataSetObserver;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.SpinnerAdapter;

public class PeintureGallerieAdapteur implements SpinnerAdapter {
    private Context monContexte;
//    private List<PeintureDonnees> mesItemsAdapteur = new ArrayList<PeintureDonnees>();
    private Cursor dbcur = null;
    private DataSetObserver observateur;
    private int monStyleGallerie;
    
    public PeintureGallerieAdapteur(Context contexte, Cursor cur) {
//		Log.i(Context.ACTIVITY_SERVICE, "ImageAdapteur:Constructor");
    	monContexte = contexte;
    	dbcur = cur;
    	TypedArray a = monContexte.obtainStyledAttributes(R.styleable.StyleGalleie);
    	monStyleGallerie = a.getResourceId(R.styleable.StyleGalleie_android_galleryItemBackground, 0);
        a.recycle();
    }
    
	@Override
	public View getDropDownView(int position, View convertView, ViewGroup parent) {
//		Log.i(Context.ACTIVITY_SERVICE, "ImageAdapteur:getDropDownView:position:" + position);
		if (convertView == null) {
//			Log.i(Context.ACTIVITY_SERVICE, "ImageAdapteur:getDropDownView:vue nulle");
		} else {
//			Log.i(Context.ACTIVITY_SERVICE, "ImageAdapteur:getDropDownView:vue non nulle");
		}
		return null;
	}

	@Override
	public int getItemViewType(int position) {
//		Log.i(Context.ACTIVITY_SERVICE, "ImageAdapteur:getItemViewType");
		return 0;
	}

	@Override
	public int getViewTypeCount() {
//		Log.i(Context.ACTIVITY_SERVICE, "ImageAdapteur:getViewTypeCount");
		return 0;
	}

	@Override
	public boolean hasStableIds() {
		boolean retour = true;
//		Log.i(Context.ACTIVITY_SERVICE, "ImageAdapteur:hasStableIds:retour:" + retour);
		return retour;
	}

	@Override
	public boolean isEmpty() {
//		Log.i(Context.ACTIVITY_SERVICE, "ImageAdapteur:isEmpty");
		if(dbcur.getCount()==0) return true;
		else return false;
	}

	@Override
	public void registerDataSetObserver(DataSetObserver observer) {
//		Log.i(Context.ACTIVITY_SERVICE, "ImageAdapteur:registerDataSetObserver");
		observateur = observer;
	}

	@Override
	public void unregisterDataSetObserver(DataSetObserver observer) {
//		Log.i(Context.ACTIVITY_SERVICE, "ImageAdapteur:unregisterDataSetObserver");
		
	}

	@Override
	public int getCount() {
		int retour = dbcur.getCount();
		return retour;
	}

	@Override
	public Object getItem(int position) {
		PeintureDonnees retour = null;
		String[] colonnes = monContexte.getResources().getStringArray(R.array.colonnes);
		if(dbcur.moveToPosition(position)) {
			retour = new PeintureDonnees(dbcur.getString(dbcur.getColumnIndex(colonnes[0])),
											dbcur.getString(dbcur.getColumnIndex(colonnes[1])),
											dbcur.getString(dbcur.getColumnIndex(colonnes[2])),
											dbcur.getString(dbcur.getColumnIndex(colonnes[7])));
		}
		return retour;
	}

	@Override
	public long getItemId(int position) {
//		Log.i(Context.ACTIVITY_SERVICE, "ImageAdapteur:getItemId:position:" + position);
		return position;
	}

	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {
		View vue = null;
		if (convertView == null) {
			vue = new ImageView(monContexte);
			((ImageView)vue).setImageResource(R.drawable.peinture);
			((ImageView)vue).setBackgroundResource(monStyleGallerie);
			final View vuebis = vue;
			new Thread() {
				@Override
				public void run() {
					if(dbcur.moveToPosition(position)) {
						String[] colonnes = monContexte.getResources().getStringArray(R.array.colonnes);
						String lien = dbcur.getString(dbcur.getColumnIndex(colonnes[0]));
						Bitmap img = null;
						boolean fait = false;
						try {
							URL urlimage = new URL(lien);
							img = BitmapFactory.decodeStream(urlimage.openConnection().getInputStream());
							fait = true;
						} catch (IOException e) {
//							Log.e(Context.ACTIVITY_SERVICE, "ImageAdapteur:getView:erreur accès image" + e.getMessage());
						} catch (OutOfMemoryError e) {
							fait = false;
						}
						final Bitmap imgbis = img;
						final boolean faitbis = fait;
						((Activity) monContexte).runOnUiThread(new Runnable() {
							@Override
							public void run() {
								if(faitbis) ((ImageView)vuebis).setImageBitmap(imgbis);
							}
						});
					}
				}
			}.start();
		} else {
			vue = convertView;
		}
		
		return vue;
	}
}
